package com.ns.sbs.oauth.redis4console;

import com.ns.core.annotations.ReqLog;
import com.ns.core.utils.sg.ResultOk;
import com.ns.core.vo.mp.CustomMap;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * redis相关操作
 *
 * @author lw
 */
@RestController
@RequestMapping("/redis/")
@CrossOrigin
public class RedisConsoleController {

    /**
     * 获取一些基本预览信息
     */
    @PostMapping("getPreInfo")
    @ReqLog(module = "缓存模块", name = "预览信息")
    public ResultOk getPreInfo() {
        CustomMap so = RedisConsoleUtil.getInfo();
        return ResultOk.getSuccessData(so);
    }

    /**
     * 查询key集合
     *
     * @param k 参数
     */
    @PostMapping("getKeys")
    @ReqLog(module = "缓存模块", name = "keys集合")
    public ResultOk getKeys(String k) {
        List<String> keys = RedisConsoleUtil.getKeys(k);
        return ResultOk.getSuccessData(keys);
    }

    /**
     * 查询某个值的详细信息
     *
     * @param key 参数
     */
    @GetMapping("getByKey")
    @ReqLog(module = "缓存模块", name = "查")
    public ResultOk getByKey(String key) {
        CustomMap customMap = RedisConsoleUtil.getByKey(key);
        return ResultOk.getSuccessData(customMap);
    }

    /**
     * 添加一个键值
     *
     * @param key   参数
     * @param value 参数
     * @param ttl   参数
     */
    @GetMapping("set")
    @ReqLog(module = "缓存模块", name = "增")
    public ResultOk set(String key, String value, long ttl) {
        RedisConsoleUtil.setBySeconds(key, value, ttl);
        return ResultOk.getSuccess();
    }

    /**
     * 删除一个键值
     *
     * @param key 参数
     */
    @GetMapping("del")
    @ReqLog(module = "缓存模块", name = "删")
    public ResultOk del(String key) {
        RedisConsoleUtil.del(key);
        return ResultOk.getSuccess();
    }

    /**
     * 修改一个值的value
     *
     * @param key   参数
     * @param value 参数
     */
    @PostMapping("updateValue")
    @ReqLog(module = "缓存模块", name = "改")
    public ResultOk updateValue(String key, String value) {
        RedisConsoleUtil.updateValue(key, value);
        return ResultOk.getSuccess();
    }

    /**
     * 修改一个值的ttl
     *
     * @param key 参数
     * @param ttl 参数
     */
    @GetMapping("updateTtl")
    @ReqLog(module = "缓存模块", name = "改TTL")
    public ResultOk updateTtl(String key, Long ttl) {
        RedisConsoleUtil.updateTtl(key, ttl);
        return ResultOk.getSuccess();
    }

    /**
     * 删除多个键值
     */
    @PostMapping("deleteByKeys")
    @ReqLog(module = "缓存模块", name = "批量删")
    public ResultOk deleteByKeys(@RequestBody KeysBO bo) {
        for (String k : bo.getKeys()) {
            RedisConsoleUtil.del(k);
        }
        return ResultOk.getSuccess();
    }
}
